package service

import (
    "{{.projectName}}/model"
    {{if eq .isUser true}}"{{.projectName}}/tools"{{end}}
    "fmt"
)

type {{.structName}}Service struct{
    {{.structName}} *model.{{.structName}}
    {{if eq .isUser true}}Tool *tools.Tools{{end}}
}

func New{{.structName}}Service() *{{.structName}}Service {
	return &{{.structName}}Service{
	    {{.structName}}:model.New{{.structName}}(),
	    {{if eq .isUser true}}Tool:tools.NewTools(),{{end}}
	}
}

{{- if eq .isUser true}}
func ({{.objectName}}Srv *{{.structName}}Service) Login(uli *model.UserLoginInfo) map[string]interface{} {
    var u model.{{.structName}}

    var tokenInfo map[string]interface{}
    {{.objectName}}Srv.{{.structName}}.Login(&u, uli)
    if u.Id != 0 {
        tokenInfo["token"], tokenInfo["expirationTime"], _ = {{.objectName}}Srv.Tool.GenToken(&u)
    }

    return tokenInfo
}
{{- end}}

func ({{.objectName}}Srv *{{.structName}}Service) Created{{.structName}}(o *model.{{.structName}}) map[string]interface{} {

    return {{.objectName}}Srv.{{.structName}}.Created{{.structName}}(o)
}

func ({{.objectName}}Srv *{{.structName}}Service) Update{{.structName}}(o *model.{{.structName}}) map[string]interface{} {

    return {{.objectName}}Srv.{{.structName}}.Update{{.structName}}(o)
}

func ({{.objectName}}Srv *{{.structName}}Service) Delete{{.structName}}(id {{.pkType}}) map[string]interface{} {

    return {{.objectName}}Srv.{{.structName}}.Delete{{.structName}}(id)
}

func ({{.objectName}}Srv *{{.structName}}Service) Find{{.structName}}All(condition map[string]interface{}) []*model.{{.structName}}{
    var list []*model.{{.structName}}

    pageSize := condition["pageSize"].(int)
    pageNo := condition["pageNo"].(int)

    delete(condition, "pageSize")
    delete(condition, "pageNo")

    {{.objectName}}Srv.{{.structName}}.Find{{.structName}}All(list, condition, pageSize, pageNo)

    return list
}

func ({{.objectName}}Srv *{{.structName}}Service) Find{{.structName}}One(id {{.pkType}}) *model.{{.structName}}{
    var o model.{{.structName}}

    {{.objectName}}Srv.{{.structName}}.Find{{.structName}}One(&o, id)

    return &o
}

func ({{.objectName}}Srv *{{.structName}}Service) {{.structName}}Task() func(){
    return func() {
        fmt.Println("定时任务逻辑 。。。")
    }
}

